--[[
描述 ： 等待视图
作者 ： gengdy
时间 ： 15/04/10
]]

UIHUD = Class(MLView,'UIHUD');

UIHUD.mViewCtrl = nil;
UIHUD.waitBgView = nil;
UIHUD.notiBgView  = nil;

UIHUD.mIsShow = nil;

UIHUD.mPopCover = nil;
UIHUD.mPopCanvas = nil;

--[[
功能   ： 等待框  广泛用于网络请求等待界面
参数   ： 
       viewCtrl 所在Ctrl
       txt      等待框提示语 
返回   ： 
]]
function UIHUD:waiting( txt, viewCtrl )

  if self.waitBgView then
    self.waitBgView = nil;
  end
  self.imgArray = {};

  for i=0, 11 do
    self.imgArray[#self.imgArray + 1] = string.format('system/waitting%02d.png', i);
  end
  ---------------只有图片没有文字------------------------------------
  --  local notiW = AW(90);
  --  self.waitBgView = MLView.new():initView(notiW, notiW);
  --  self.waitBgView:getGraphic():fillRect (0, 0, notiW, notiW, 0x111111, 15);
  --
  --  local image = UIImage.imageName(self.imgArray[1]);
  --  self.img = UIImageView.new():init(image, AW(30), AW(30));
  --  self.img:show();
  --  self.waitBgView:add(self.img, AW(30), AW(30));
  --
  --
  --  self.text = UITextView.new():init(txt, AW(30), AW(30),self); --(text, width, height, viewCtrl, id)
  --  self.text:show();
  --  self.waitBgView:add(self.text, AW(60), AW(30));
  ---------------以上代码只展示图片没有文字------------------------------------
  -----------------以下是 耿小羊 改动的  添加了文字展示---------------------------------------
  --local deviceW, deviceH = MLNative.getScreen():getWH();

  --  self.viewCtrl = {};
  --  setmetatable(self.viewCtrl, {__mode="kv"});   -- 弱引用

  self.mViewCtrl = viewCtrl;

  local deviceW, deviceH = viewCtrl.rootView:getWH();
  self.waitBgView = MLView.new():initView(deviceW, deviceH, viewCtrl);
  self.waitBgView.onClick = function (  )
  -- 处理安卓view穿透事件
  end

  --self.waitBgView.parent = self;
  local g = self.waitBgView:getGraphic();
  g:clear();

  if txt == nil then
    txt = UITheme.UIHUD_TXT;
  end
  local font = AW(UITheme.UIHUD_FONT);
  local strw = MLNative.measStringWidth(txt, font, nil);
  local ix, iy;
  local iw, ih = AW(50), AW(50);

  if strw < AW(70) then
    g:fillRect((deviceW-AW(140))/2, (deviceH-AH(70))/2-AH(30), AW(140), AH(70), UIColor.COLOR_BLACK, AW(10));
    ix , iy = (deviceW-AW(140))/2+AW(10), (deviceH-AH(70))/2-AH(30)+AH(10);
  else
    g:fillRect((deviceW-AW(200))/2, (deviceH-AH(70))/2-AH(30), AW(200), AH(100), UIColor.COLOR_BLACK, AW(10));
    ix , iy = (deviceW-AW(200))/2+AW(10), (deviceH-AH(70))/2-AH(30)+AH(25);
  end

  local image = UIImage.imageName(self.imgArray[1]);
  --  if self.img  then
  --   self.img = nil ;
  --  end
  self.img = UIImageView.new():init(image, AW(50), AW(50),self.mViewCtrl);
  self.img:show();
  self.waitBgView:add(self.img, ix, iy);

  if strw < AW(70) then
    g:drawString(txt, ix+AW(60), iy+(AW(50)-font)/2, UIColor.COLOR_WHITE, font, nil);
  else
    local lines = UIUtils.calcTextLine(txt, AW(130), 1, font);
    g:drawString(lines[1], ix+AW(60), iy+(AH(50)-font)/2, UIColor.COLOR_WHITE, font, nil);
  end
  -----------------以上是改动的  添加了文字展示---------------------------------------
  self:PopNotiView(self.waitBgView);

  self.tag = 1;

  self.waitMLTimer = MLTimer.new():initTimer(viewCtrl);
  self.waitMLTimer.onTimer = function ()
    if self.img ~= nil then
      self.img.image = UIImage.imageName(self.imgArray[self.tag]);
      self.img:update();
      if self.tag == #self.imgArray then
        self.tag = 1;
      else
        self.tag = self.tag + 1;
      end
    end
  end
  self.waitMLTimer:start(100, true);
  self.mIsShow = true;

  return self;

end

--[[
功能   ： 手动关闭等待框
参数   ： 无
返回   ： 无
]]
function UIHUD:dimissWaiting()
  --print('UIHUD:dimissWaiting()', self);
  if self.waitMLTimer then
    self.waitMLTimer:stop();
    self.waitMLTimer = nil ;
  end
  self:ClosePop(self.waitBgView);
  self.mIsShow = false;

  --self.waitBgView:onDestroy();
  if self.waitBgView then self.waitBgView = nil  end
  if self.mViewCtrl then self.mViewCtrl = nil  end
  if self.imgArray then self.imgArray = {}  end
  if self.img then self.img = nil  end
end


--[[
功能   ： Toast 一段文字
参数   ： txt 提示语
       ms  弹出多少毫秒
       viewCtrl 所在Ctrl
返回   ： 无
]]
function UIHUD:notify(txt, ms, viewCtrl)

  if not self.mViewCtrl then self.mViewCtrl = viewCtrl; end

  if self.notiBgView then
    self.notiBgView = nil;
  end

  self.mIsPopNotify = true;

  --local deviceW, deviceH = MLNative.getScreen():getWH();
  local deviceW, deviceH = viewCtrl.rootView:getWH();

  self.notiBgView = MLView.new():initView(deviceW, deviceH, viewCtrl);

  self.notiBgView.parent = self;
  local g = self.notiBgView:getGraphic();
  g:clear();

  --  self.mViewCtrl = {};
  --  setmetatable(self.mViewCtrl, {__mode="kv"});   -- 弱引用

  local w, h = AW(220), AH(30);
  local font = AW(UITheme.UIHUD_FONT);

  local lines = UIUtils.calcTextLine(txt, w, 999, font, self.fs);
  if #lines > 1 then
    --多行
    local strh = font * #lines + (#lines-1)*3 + AW(30);
    local fw, fh = AW(220), strh;
    local fx, fy = (deviceW-fw)/2, (deviceH-fh)/2;
    g:fillRect(fx, fy, fw, fh, UIColor.COLOR_BLACK, AW(15));

    for i=1, #lines do
      local strw = MLNative.measStringWidth(lines[i], font);

      local x = fx + (fw-strw)/2;
      local y = fy + AW(15) + (i-1)*font + (i-1)*3;
      g:drawString(lines[i], x, y, 0xffffff, font, nil);
    end

  else
    --单行
    local tw = MLNative.measStringWidth(txt, font);
    if tw > AW(100) then
      local fw, fh = tw+AW(30), font+AW(30);
      local fx, fy = (deviceW-fw)/2, (deviceH-fh)/2;
      g:fillRect(fx, fy, fw, fh,  0x000000, AW(15));
      g:drawString(txt, fx+AW(15), fy+AW(15), 0xffffff, font, nil);
    else
      local fw, fh = AW(100)+AW(30), font+AW(30);
      local fx, fy = (deviceW-fw)/2, (deviceH-fh)/2;
      g:fillRect(fx, fy, fw, fh, 0x000000, AW(15));
      g:drawString(txt, fx+(fw-tw)/2, fy+AW(15), 0xffffff, font, nil);
    end
  end

  self:PopNotiView(self.notiBgView);

  self.notiMLTimer = MLTimer.new():initTimer(viewCtrl);
  self.notiMLTimer.onTimer = function ()
    self:ClosePop(self.notiBgView);
    self.isNotiPop = true;
    self.notiBgView = nil ;
    self.mViewCtrl = nil ;
  end
  self.notiMLTimer:start(ms or 2000, false);

end


--[[
功能   ： 弹出view
参数   ： view  当前显示的view
返回   ： 无
]]
function UIHUD:PopNotiView( view )
  --local scr = MLNative.getScreen();
  local scr = self.mViewCtrl.rootView
  local sw, sh = scr:getWH();
  local w, h = view:getWH();

  if self.mPopCanvas then return; end

  self.mPopCover = MLView.new():initView(sw, sh,self.mViewCtrl);
  --self.mPopCover:setColor(0);
  --self.mPopCover:setAlpha(0.5)
  scr:add(self.mPopCover, 0, 0);
  self.mPopCover.onClick = function (  )
  -- 处理安卓view穿透事件
  end

  scr:add(view, (sw-w)/2, (sh-h)/2);
  self.mPopCanvas = view;
end

--[[
功能   ： Close View
参数   ： 无
返回   ： 无
]]
function UIHUD:ClosePop(view)
  --local scr = self.mViewCtrl.rootView
  if self.mPopCover then self.mViewCtrl.rootView:del(self.mPopCover); end
  if self.mPopCanvas then self.mViewCtrl.rootView:del(self.mPopCanvas); end
  --if self.mPopCover then MLNative.getScreen():del(self.mPopCover); end
  --if self.mPopCanvas then MLNative.getScreen():del(self.mPopCanvas); end
  self.mPopCover = nil;
  self.mPopCanvas = nil;

end

